From 15b69747c4ac9c9b07e2e20884524912129a8877 Mon Sep 17 00:00:00 2001 From: "Jan D." Date: Wed, 9 Oct 2013 20:50:14 +0200 Subject: [PATCH] * nsfns.m (Fns_convert_utf8_nfd_to_nfc): Check input for valid UTF-8 or throw error. --- src/ChangeLog | 5 +++++ src/nsfns.m | 21 ++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 81204b4c44f..e565748632d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2013-10-09 Jan Djärv + + * nsfns.m (Fns_convert_utf8_nfd_to_nfc): Check input for valid UTF-8 + or throw error (Bug#15570). + 2013-10-09 Paul Eggert * intervals.c (temp_set_point_both): Move test into 'eassert', diff --git a/src/nsfns.m b/src/nsfns.m index 93b7d12becb..24edd4366ce 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -2048,16 +2048,27 @@ DEFUN ("ns-convert-utf8-nfd-to-nfc", Fns_convert_utf8_nfd_to_nfc, /* TODO: If GNUstep ever implements precomposedStringWithCanonicalMapping, remove this. */ NSString *utfStr; - Lisp_Object ret; + Lisp_Object ret = Qnil; + NSAutoreleasePool *pool; CHECK_STRING (str); - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - utfStr = [NSString stringWithUTF8String: SSDATA (str)]; + pool = [[NSAutoreleasePool alloc] init]; + utfStr = [NSString stringWithUTF8String: SSDATA (str)]; #ifdef NS_IMPL_COCOA - utfStr = [utfStr precomposedStringWithCanonicalMapping]; + if (utfStr) + utfStr = [utfStr precomposedStringWithCanonicalMapping]; #endif - ret = build_string ([utfStr UTF8String]); + if (utfStr) + { + const char *cstr = [utfStr UTF8String]; + if (cstr) + ret = build_string (cstr); + } + [pool release]; + if (NILP (ret)) + error ("Invalid UTF-8"); + return ret; } -- 2.30.2